## 2024 Presidential election - Long format ###

library(tidyverse)
library(readxl)
library(stringi)
library(janitor)

pres_2024 <- rio::import("data/resultados-macedonia-del-norte.csv", encoding = "Latin-1")

pres_2024_fusion <- pres_2024 %>% 
  mutate(Municipio = str_replace(MUN, "ï¿½", "Ñ"),
         Municipio = str_remove(Municipio, "MP\\.\\s*"),
         Parroquia = str_replace(PAR, "ï¿½", "Ñ"),
         Parroquia = case_when(
           Parroquia == "C.M. MATURIN" ~ Parroquia,  # Keep this value unchanged
           TRUE ~ str_remove_all(Parroquia, "CM\\.\\s*|PQ\\.\\s*")),  # Remove CM. and PQ. for all other rows
         Parroquia = if_else(
           str_detect(Parroquia, "STA"),            # Check if "STA" is in the row
           str_replace(Parroquia, "\\.", ""),       # Remove the dot after "STA"
           Parroquia                                # Keep other rows unchanged
         ),
         Parroquia = stri_trans_general(Parroquia, "Latin-ASCII"),
         COD_EDO = as.character(COD_EDO),
         COD_MUN = as.character(COD_MUN),
         COD_PAR = as.character(COD_PAR),
         CENTRO = as.character(CENTRO),
         MESA = as.factor(MESA)
  ) 


#### Municipalities codes ####

# Check mun-codes differences with the 2006-2018 dataset

# municipios_dif <- setdiff(pres_2024_fusion$Municipio, ven_centros_eleccion_pres$Municipio)

# municipios_diff_pres_2024 <- pres_2024_fusion %>% select(Municipio, Parroquia) %>% 
#  filter(Municipio %in% municipios_dif) %>% distinct()

pres_2024_fusion <- pres_2024_fusion %>%
  mutate(
    Municipio = case_when(
      str_detect(Municipio, "BLVNO LIBERTADOR") ~ "LIBERTADOR",
      str_detect(Municipio, "L/DIEGO BAUTISTA") ~ "DIEGO BAUTISTA URBANEJA",
      str_detect(Municipio, "S JUAN CAPISTRANO") ~ "SAN JUAN DE CAPISTRANO",
      str_detect(Municipio, "MARIO B IRAGORRY") ~ "MARIO BRICEÑO IRAGORRY",
      str_detect(Municipio, "JOSE R REVENGA") ~ "JOSE RAFAEL REVENGA",
      str_detect(Municipio, "FRANCISCO LINARES") ~ "FRANCISCO LINARES ALCANTARA",
      str_detect(Municipio, "OCUMARE D L COSTA") ~ "OCUMARE DE LA COSTA DE ORO",
      str_detect(Municipio, "ALBERTO ARVELO T") ~ "ALBERTO ARVELO TORREALBA",
      str_detect(Municipio, "A JOSE DE SUCRE") ~ "ANTONIO JOSE DE SUCRE",
      str_detect(Municipio, "ANDRES E. BLANCO") ~ "ANDRES ELOY BLANCO",
      str_detect(Municipio, "ANGOSTURA DEL OR") ~ "HERES",
      str_detect(Municipio, "BLVNO DE ANGOSTU") ~ "ANGOSTURA",
      str_detect(Municipio, "AUTONOMO TINAQUI") ~ "AUTONOMO TINAQUILLO",
      str_detect(Municipio, "PAO S J BAUTISTA") ~ "PAO DE SAN JUAN BAUTISTA",
      str_detect(Municipio, "MONS. ITURRIZA") ~ "MONSEÑOR ITURRIZA",
      str_detect(Municipio, "JUAN GERMAN ROSC") ~ "ROSCIO",
      str_detect(Municipio, "S JOSE DE GUARIBE") ~ "SAN JOSE DE GUARIBE",
      str_detect(Municipio, "S MARIA DE IPIRE") ~ "SANTA MARIA DE IPIRE",
      str_detect(Municipio, "SAN GERONIMO DE G") ~ "SAN GERONIMO DE GUAYABAL",
      str_detect(Municipio, "ANDRES E BLANCO") ~ "ANDRES ELOY BLANCO",
      str_detect(Municipio, "ANTONIO PINTO S.") ~ "ANTONIO PINTO SALINAS",
      str_detect(Municipio, "OB. RAMOS DE LORA") ~ "OBISPO RAMOS DE LORA",
      str_detect(Municipio, "CARACCIOLO PARRA") ~ "CARACCIOLO PARRA OLMEDO",
      str_detect(Municipio, "TULIO F CORDERO") ~ "TULIO FEBRES CORDERO",
      str_detect(Municipio, "PENIN. DE MACANAO") ~ "PENINSULA DE MACANAO",
      str_detect(Municipio, "VILLALBA\\(I.COCHE\\)") ~ "VILLALBA",
      str_detect(Municipio, "M.JOSE V DE UNDA") ~ "MONSEÑOR JOSE VICENTE DE UNDA",
      str_detect(Municipio, "GENARO BOCONOITO") ~ "SAN GENARO DE BOCONOITO",
      str_detect(Municipio, "S RAFAEL DE ONOTO") ~ "SAN RAFAEL DE ONOTO",
      str_detect(Municipio, "CRUZ S ACOSTA") ~ "CRUZ SALMERON ACOSTA",
      str_detect(Municipio, "CAPACHO NUEVO") ~ "INDEPENDENCIA",
      str_detect(Municipio, "CAPACHO VIEJO") ~ "LIBERTAD",
      str_detect(Municipio, "SAMUEL MALDONADO") ~ "SAMUEL DARIO MALDONADO",
      str_detect(Municipio, "ANTONIO ROMULO C") ~ "ANTONIO ROMULO COSTA",
      str_detect(Municipio, "FCO DE MIRANDA") ~ "FRANCISCO DE MIRANDA",
      str_detect(Municipio, "JOSE M. VARGAS") ~ "JOSE MARIA VARGAS",
      str_detect(Municipio, "S RAFAEL CARVAJAL") ~ "SAN RAFAEL DE CARVAJAL",
      str_detect(Municipio, "J.F.MARQUEZ C.") ~ "JOSE FELIPE MARQUEZ CAÑIZALES",
      str_detect(Municipio, "J.V. CAMPO ELIAS") ~ "JUAN VICENTE CAMPO ELIAS",
      str_detect(Municipio, "ARISTIDES BASTID") ~ "ARISTIDES BASTIDAS",
      str_detect(Municipio, "INDIGENA BLVNO G") ~ "GUAJIRA",
      str_detect(Municipio, "MACHIQUES DE P") ~ "MACHIQUES DE PERIJA",
      str_detect(Municipio, "LA CAÑADA DE U.") ~ "LA CAÑADA DE URDANETA",
      str_detect(Municipio, "JESUS E LOSSADA") ~ "JESUS ENRIQUE LOSSADA",
      str_detect(Municipio, "FRANCISCO J PULG") ~ "FRANCISCO JAVIER PULGAR",
      str_detect(Municipio, "JESUS M SEMPRUN") ~ "JESUS MARIA SEMPRUM",
      TRUE ~ Municipio # Keep other values unchanged
    )
  )

names(pres_2024_fusion)
#names(ven_centros_eleccion_pres)

#### Checking difference between precinct codes ####

# unique_polls_ven_pres <- ven_centros_eleccion_pres %>% 
#  select(centro,estado, Municipio,Parroquia,nombre_centro) %>% 
#  distinct() %>% unite(municipio_centro, Municipio, centro, sep = "_", remove = F)

# unique_polls_2024 <- pres_2024_fusion %>% select(1:7) %>% 
#  mutate(year = as.factor(2024)) %>% 
#  unite(municipio_centro, Municipio, CENTRO, sep = "_", remove = F)

# poll_diff <- setdiff(unique_polls_ven_pres$municipio_centro, unique_polls_2024$municipio_centro)

# Tenemos una diferencia de 1241 centros entre las elecciones de 2024 con el resto

#### EDO codes ####

# unique(ven_centros_eleccion_pres$estado)
unique(pres_2024_fusion$EDO)

pres_2024_fusion <- pres_2024_fusion %>% 
  mutate(
    EDO = str_replace_all(EDO, "EDO\\. ", ""),  # Remove "EDO. "
    EDO = case_when(
      EDO == "NVA.ESPARTA" ~ "NUEVA ESPARTA",
      EDO == "EDO.NVA.ESPARTA" ~ "NUEVA ESPARTA",
      EDO == "DELTA AMAC" ~ "DELTA AMACURO",
      TRUE ~ EDO  # Keep other values unchanged
    ),
    COD_EDO = case_when(
      EDO == "ZULIA" ~ "21",
      TRUE ~ COD_EDO
    ),
    COD_MUN = case_when(
      Municipio == "MARACAIBO" ~ "5",
      TRUE ~ COD_MUN
    )
  )

# ven_centros_eleccion_pres <- ven_centros_eleccion_pres %>% 
#  mutate(estado = case_when(
#    estado == "ANZOÁTEGUI" ~ "ANZOATEGUI",
#    TRUE ~ estado
#  )
#  )

## Check differences

# edo_diff <- setdiff(ven_centros_eleccion_pres$estado, pres_2024_fusion$EDO)
# edo_diff

### Parroquia code ###

# par_diff <- setdiff(pres_2024_fusion$Parroquia, ven_centros_eleccion_pres$Parroquia)
# par_hist <- unique(as.character(ven_centros_eleccion_pres$Parroquia))
# sort(par_hist)
# sort(par_diff)

pres_2024_fusion <- pres_2024_fusion %>% mutate(
  Parroquia = case_when(
    Parroquia == "ALTOS DE LOS GODOS" ~ "ALTO DE LOS GODOS",
    Parroquia == "AMENODORO RANGEL LAMU" ~ "AMENODORO RANGEL LAMUS",
    Parroquia == "ANTONIO N BRICENO" ~ "ANTONIO N BRICEÑO",
    Parroquia == "ELEAZAR LOPEZ C" ~ "ELEAZAR LOPEZ CONTRERAS",
    Parroquia == "ELEAZAR LOPEZ CONTRERA" ~ "ELEAZAR LOPEZ CONTRERAS",
    Parroquia == "FILAS DE MARICHE" ~ "FILAS DE MARICHES",
    Parroquia == "ISAIAS MEDINA ANGARIT" ~ "ISAIAS MEDINA ANGARITA",
    Parroquia == "JOSE CENOVIO URRIBARR" ~ "JOSE CENOVIO URRIBARRI",
    Parroquia == "JUAN PABLO PENALOZA" ~ "JUAN PABLO PEÑALOZA",
    Parroquia == "LA APARICION" ~ "APARICION",
    Parroquia == "LUIS B. PRIETO F." ~ "LUIS B PRIETO FIGUERO",
    Parroquia == "MCL.ANTONIO J DE SUCRE" ~ "MCL. ANTONIO J DE SUCRE",
    Parroquia == "PALACIOS FAJARDO" ~ "PALACIO FAJARDO",
    Parroquia == "PALMASOLA" ~ "PALMA SOLA",
    Parroquia == "PARAUTE" ~ "ALONSO DE OJEDA",
    Parroquia == "PEDRO BRICENO MENDEZ" ~ "PEDRO BRICEÑO MENDEZ",
    Parroquia == "PQ AUGUSTO MIJARES" ~ "AUGUSTO MIJARES",
    Parroquia == "SAN JOSE DE AEROCUAR" ~ "SAN JOSE DE AREOCUAR",
    Parroquia == "SAN JOSE DE LA MONTANA" ~ "SAN JOSE DE LA MONTAÑA",
    Parroquia == "SAN JUAN DE LAS GALDO" ~ "SAN JUAN GALDONAS",
    Parroquia == "SAN RAFAEL DE A." ~ "SAN RAFAEL DE ALZAZAR",
    Parroquia == "STA ANA  DEL TACHIRA" ~ "STA. ANA  DEL TACHIRA",
    Parroquia == "STACRUZ DE BUCARAL" ~ "STA.CRUZ DE BUCARAL",
    Parroquia == "URIBARRI" ~ "URRIBARRI",
    Parroquia == "GUAJIRA" ~ "GOAJIRA",
    
    # Replacing only **specific occurrences** of "N" with "Ñ"
    Parroquia == "MARCELINO BRICENO" ~ "MARCELINO BRICEÑO",
    Parroquia == "MONTANA VERDE" ~ "MONTAÑA VERDE",
    Parroquia == "MONSENOR CARRILLO" ~ "MONSEÑOR CARRILLO",
    Parroquia == "PENA BLANCA" ~ "PEÑA BLANCA",
    Parroquia == "FERNANDEZ PENA" ~ "FERNANDEZ PEÑA",
    Parroquia == "DOMINGO PENA" ~ "DOMINGO PEÑA",
    Parroquia == "IGNACIO BRICENO" ~ "IGNACIO BRICEÑO",
    Parroquia == "MONSENOR JAUREGUI" ~ "MONSEÑOR JAUREGUI",
    
    # General case for other names that should contain "Ñ"
    Parroquia %in% c("CANA DE AZUCAR", "CANO DELGADITO", "CANO EL TIGRE", "MARINO",
                     "LA PENA", "MIGUEL PENA", "PENALVER", "PINANGO", "CASTANEDA",
                     "LAS PENITAS", "EL BANO", "URENA", "PARHUENA", "TUNAME") ~ str_replace(Parroquia, "N", "Ñ"),
    TRUE ~ Parroquia # Keep everything else unchanged
  ),
  COD_PAR = case_when(
    Parroquia == "MACUTO" ~ "1137",
    Parroquia == "RAUL LEONI" ~ "1006",
    TRUE ~ COD_PAR)
)

# ven_centros_eleccion_pres <- ven_centros_eleccion_pres %>%
#  mutate(Parroquia = case_when(
#    Parroquia == "JUAN DE VILLEGAS" ~ "GUERRERA ANA SOTO",
#    TRUE ~ Parroquia  # Keep all other values unchanged
#  ))


#### Registered voters for 2024 #####

rep_2024 <- read_csv("data/TablaMesaEleccionPresidencial2024.csv") %>% 
  select(-starts_with("...")) %>% 
  select(CODIGO_CV, MESA, VOTANTES_MESA) %>% 
  unite(centro_mesa, CODIGO_CV, MESA, remove = T) %>% 
  rename(rep_c = VOTANTES_MESA)


#### Merge ####

pres_2024_long <- pres_2024_fusion %>% 
  unite(centro_mesa, CENTRO, MESA, remove = F) %>% 
  left_join(., rep_2024, by = "centro_mesa") %>% 
  select(-centro_mesa, -NM,-EG, -LM,-JABE,-JOBR,-AE,-CF,-DC,-EM,-BERA, -URL) %>% 
  rename(
    validos = VOTOS_VALIDOS,
    nulos = VOTOS_NULOS,
    estado = EDO,
    mesa = MESA,
    centro = CENTRO) %>% 
  mutate(year = as.factor(2024),
         abst_c = rep_c - (validos + nulos))

names(pres_2024_long) <- tolower(names(pres_2024_long))

# Long format ####

## Select metadata variables 

meta_vars <- c("cod_edo", "estado", "cod_mun", "mun", "cod_par", "par", "centro", "mesa", 
               "validos", "nulos", "nombre_centro", "municipio", "parroquia", 
               "rep_c", "year", "abst_c")

## Pivot longer all vote columns and extract initials and party label 

pres_2024_long_clean <- pres_2024_long %>%
  pivot_longer(
    cols = -all_of(meta_vars),  # All variables that are not metadata
    names_to = "vote_var",
    values_to = "votes"
  ) %>%
  mutate(
    candidate_initials = str_extract(vote_var, "^[^_]+"),     # everything before first "_"
    party_label = str_extract(vote_var, "(?<=_).*"),          # everything after first "_"
    party_code = str_pad(as.numeric(factor(party_label)), width = 2, pad = "0"),              # invented code: numeric ID
    totales_c = validos+nulos,
    candidate = case_when(
      candidate_initials == "eg" ~ "Edmundo González",
      candidate_initials == "nm" ~ "Nicolás Maduro",
      candidate_initials == "lm" ~ "Luis Eduardo Martínez",
      candidate_initials == "ae" ~ "Antonio Ecarri",
      candidate_initials == "bera" ~ "Benjamín Rausseo",
      candidate_initials == "em" ~ "Enrique Márquez",
      candidate_initials == "jobr" ~ "José Brito",
      candidate_initials == "jabe" ~ "Javier Bertucci",
      candidate_initials == "cf" ~ "Claudio Fermín",
      candidate_initials == "dc" ~ "Daniel Ceballos",
      TRUE ~ NA_character_
    ),
    # Add political bloc
    bloc = case_when(
      candidate_initials == "eg" ~ "Opposition",
      candidate_initials == "nm" ~ "Officialism",
      candidate_initials %in% c("lm", "ae", "bera", "em", "jobr", "jabe", "cf", "dc") ~ "Other",
      TRUE ~ NA_character_
    ),
    party_name = case_when(
      party_label == "psuv" ~ "Partido Socialista Unido de Venezuela (PSUV)",
      party_label == "pcv" ~ "Partido Comunista de Venezuela (PCV)",
      party_label == "tupamaro" ~ "Tupamaro",
      party_label == "ppt" ~ "Patria Para Todos (PPT)",
      party_label == "msv" ~ "Movimiento Somos Venezuela",
      party_label == "podemos" ~ "Por la Democracia Social (PODEMOS)",
      party_label == "mep" ~ "Movimiento Electoral del Pueblo (MEP)",
      party_label == "apc" ~ "Alianza para el Cambio",
      party_label == "ora" ~ "Organización Renovadora Auténtica (ORA)",
      party_label == "upv" ~ "Unidad Popular Venezolana (UPV)",
      party_label == "ev" ~ "Enamórate Venezuela",
      party_label == "pvv" ~ "Partido Verde de Venezuela",
      party_label == "fpv" ~ "Frente Popular Venezolano",
      party_label == "ad" ~ "Acción Democrática (AD)",
      party_label == "copei" ~ "COPEI",
      party_label == "mr" ~ "Movimiento Republicano",
      party_label == "br" ~ "Bandera Roja",
      party_label == "ddp" ~ "Derecha Democrática Popular",
      party_label == "une" ~ "Unión Nacional Electoral",
      party_label == "vu" ~ "Venezuela Unida",
      party_label == "uvv" ~ "Unidad Visión Venezuela",
      party_label == "mpj" ~ "Primero Justicia",
      party_label == "pv" ~ "Primero Venezuela",
      party_label == "ap" ~ "Avanzada Progresista",
      party_label == "movev" ~ "Movimiento Ecológico de Venezuela",
      party_label == "cmc" ~ "Cambiemos Movimiento Ciudadano",
      party_label == "fv" ~ "Fuerza Vecinal",
      party_label == "lapiz" ~ "Alianza del Lápiz",
      party_label == "min_unidad" ~ "MIN-Unidad",
      party_label == "spv" ~ "Soluciones para Venezuela",
      party_label == "vpa" ~ "Voluntad Popular",
      party_label == "arepa" ~ "Arepa Digital",
      party_label == "untc" ~ "Un Nuevo Tiempo (UNT)",
      party_label == "mpv" ~ "Movimiento por Venezuela",
      party_label == "mud" ~ "Mesa de la Unidad Democrática (MUD)",
      party_label == "centrados" ~ "Centrados en la Gente",
      party_label == "el_cambio" ~ "Esperanza por El Cambio",
      party_label == "conde" ~ "Confederación Nacional Democrática",
      TRUE ~ NA_character_
    ),
    # Standardized geographic and mesa codes
    cod_edo = str_pad(cod_edo, width = 2, pad = "0"),
    cod_mun = str_pad(cod_mun, width = 2, pad = "0"),
    cod_par = str_pad(cod_par, width = 2, pad = "0"),
    cod_centro = str_pad(centro, width = 9, pad = "0"),
    mesa = str_pad(mesa, width = 2, pad = "0"),
    # Unique party-polling station ID
    party_mesa_id = paste(centro, mesa, party_code, sep = "")
  ) %>% select(-vote_var) %>% 
  relocate(votes, .after = party_label) %>% 
  relocate(candidate, .after = candidate_initials) %>% 
  relocate(party_name, .after = party_label)


## Save final dataset ####

saveRDS(pres_2024_long_clean, "ven_party_long_2024.rds")
write.csv(pres_2024_long_clean, "ven_party_long_2024.csv", row.names = F)


